package com.firewolf.springboot;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;

import freemarker.template.Configuration;
import freemarker.template.Template;

//运行测试用例
@RunWith(SpringJUnit4ClassRunner.class)
// 指定SpringBoot启动类
@SpringBootTest(classes = App.class)
public class EmailTest {

	// SpringBoot自动通过配置文件装配好的Bean，这里可以直接注入
	@Autowired
	private JavaMailSender mailSender;

	/**
	 * 发送简单的邮件
	 */
	@Test
	public void sendSimpleEmail() {
		SimpleMailMessage message = new SimpleMailMessage();
		message.setFrom("1483345163@qq.com");// 发送者.
		message.setTo("1109260263@qq.com");// 接收者.
		message.setSubject("测试邮件1");// 邮件主题.
		message.setText("这是一封简单的邮件！！！");// 邮件内容.
		mailSender.send(message);// 发送邮件
	}

	/**
	 * 测试发送附件
	 * 
	 * @throws MessagingException
	 */
	@Test
	public void sendAttachmentsEmail() throws MessagingException {
		// 这个是javax.mail.internet.MimeMessage下的，不要搞错了。
		MimeMessage mimeMessage = mailSender.createMimeMessage();
		MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);

		helper.setFrom("1483345163@qq.com");// 发送者.
		helper.setTo("1109260263@qq.com");// 接收者.
		helper.setSubject("测试邮件2");// 邮件主题.
		helper.setText("这是一封带有附件的邮件！！！");// 邮件内容.

		// org.springframework.core.io.FileSystemResource下的:
		// 附件1,获取文件对象.
		FileSystemResource file1 = new FileSystemResource(new File("files/file1.txt"));
		// 添加附件，这里第一个参数是在邮件中显示的名称，但是如果是图片的话，一定要有文件后缀。
		helper.addAttachment("文件1.txt", file1);
		// 附件2
		FileSystemResource file2 = new FileSystemResource(new File("files/file1.txt"));
		helper.addAttachment("文件2.txt", file2);

		mailSender.send(mimeMessage);
	}

	@Test
	public void sendInlineMail() throws Exception {
		MimeMessage mimeMessage = mailSender.createMimeMessage();

		MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
		// 基本设置.
		helper.setFrom("1483345163@qq.com");// 发送者.
		helper.setTo("1109260263@qq.com");// 接收者.
		helper.setSubject("测试内嵌静态资源");// 邮件主题.
		// 邮件内容，第二个参数指定发送的是HTML格式
		// 说明：嵌入图片<img src='cid:head'/>，其中cid:是固定的写法，而aaa是一个contentId。
		helper.setText(
				"<body>这是图片：<br> <img src='cid:p1' width='100px' /><hr><img src='cid:p2' width='100px' /><hr><img src='cid:p3' width='100px' /></body>",
				true);

		FileSystemResource file = new FileSystemResource(new File("imgs/p1.png"));
		helper.addInline("p1", file);
		FileSystemResource file2 = new FileSystemResource(new File("imgs/p2.png"));
		helper.addInline("p2", file2);
		FileSystemResource file3 = new FileSystemResource(new File("imgs/p3.png"));
		helper.addInline("p3", file3);

		mailSender.send(mimeMessage);

	}

	@Test
	public void sendTemplateMail() throws Exception {

		MimeMessage mimeMessage = mailSender.createMimeMessage();

		MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
		// 基本设置.
		helper.setFrom("1483345163@qq.com");// 发送者.
		helper.setTo("1109260263@qq.com");// 接收者.
		helper.setSubject("模板邮件");// 邮件主题.

		Map<String, Object> model = new HashMap<String, Object>();
		model.put("username", "老婆");

		Configuration cfg = new Configuration(Configuration.VERSION_2_3_26);
		// 设定去哪里读取相应的ftl模板
		cfg.setClassForTemplateLoading(this.getClass(), "/templates");
		// 在模板文件目录中寻找名称为name的模板文件
		Template template = cfg.getTemplate("emailtemplate.ftl");

		String html = FreeMarkerTemplateUtils.processTemplateIntoString(template, model);
		helper.setText(html, true);

		mailSender.send(mimeMessage);
	}
}